#include <stdarg.h>
#include "invoke.h"
#include "callback.h"
#include "cbslots.h"

#define decl_slot(N) \
	LL cb_slot##N(long x, ...) { va_list ap; va_start(ap, x); return callback_run(&cb_slots[N], x, ap); }

callback_t cb_slots[MAX_SLOTS];

decl_slot(0)
decl_slot(1)
decl_slot(2)
decl_slot(3)
decl_slot(4)
decl_slot(5)
decl_slot(6)
decl_slot(7)
decl_slot(8)
decl_slot(9)
decl_slot(10)
decl_slot(11)
decl_slot(12)
decl_slot(13)
decl_slot(14)
decl_slot(15)
decl_slot(16)
decl_slot(17)
decl_slot(18)
decl_slot(19)
decl_slot(20)
decl_slot(21)
decl_slot(22)
decl_slot(23)
decl_slot(24)
decl_slot(25)
decl_slot(26)
decl_slot(27)
decl_slot(28)
decl_slot(29)
decl_slot(30)
decl_slot(31)
decl_slot(32)
decl_slot(33)
decl_slot(34)
decl_slot(35)
decl_slot(36)
decl_slot(37)
decl_slot(38)
decl_slot(39)
decl_slot(40)
decl_slot(41)
decl_slot(42)
decl_slot(43)
decl_slot(44)
decl_slot(45)
decl_slot(46)
decl_slot(47)
decl_slot(48)
decl_slot(49)
decl_slot(50)
decl_slot(51)
decl_slot(52)
decl_slot(53)
decl_slot(54)
decl_slot(55)
decl_slot(56)
decl_slot(57)
decl_slot(58)
decl_slot(59)
decl_slot(60)
decl_slot(61)
decl_slot(62)
decl_slot(63)

void* code_slots[MAX_SLOTS] = {
	cb_slot0,
	cb_slot1,
	cb_slot2,
	cb_slot3,
	cb_slot4,
	cb_slot5,
	cb_slot6,
	cb_slot7,
	cb_slot8,
	cb_slot9,
	cb_slot10,
	cb_slot11,
	cb_slot12,
	cb_slot13,
	cb_slot14,
	cb_slot15,
	cb_slot16,
	cb_slot17,
	cb_slot18,
	cb_slot19,
	cb_slot20,
	cb_slot21,
	cb_slot22,
	cb_slot23,
	cb_slot24,
	cb_slot25,
	cb_slot26,
	cb_slot27,
	cb_slot28,
	cb_slot29,
	cb_slot30,
	cb_slot31,
	cb_slot32,
	cb_slot33,
	cb_slot34,
	cb_slot35,
	cb_slot36,
	cb_slot37,
	cb_slot38,
	cb_slot39,
	cb_slot40,
	cb_slot41,
	cb_slot42,
	cb_slot43,
	cb_slot44,
	cb_slot45,
	cb_slot46,
	cb_slot47,
	cb_slot48,
	cb_slot49,
	cb_slot50,
	cb_slot51,
	cb_slot52,
	cb_slot53,
	cb_slot54,
	cb_slot55,
	cb_slot56,
	cb_slot57,
	cb_slot58,
	cb_slot59,
	cb_slot60,
	cb_slot61,
	cb_slot62,
	cb_slot63
};
